package Util

import (
	"fmt"
	"github.com/go-playground/validator/v10"
	"strings"
)

// 错误信息映射表
var errorMessages = map[string]string{
	"required": "该字段是必需的",
	"email":    "邮箱格式不正确",
	"min":      "长度不能小于{min}",
	"max":      "长度不能大于{max}",
	"len":      "长度必须为{len}",
	"numeric":  "必须是数字",
	"url":      "URL格式不正确",
	"alphanum": "必须是字母或数字",
	"oneof":    "必须是 {oneof} 中的一个值",
	"eqfield":  "必须与 {field} 字段相同",
	"gte":      "必须大于或等于{gte}",
	"lte":      "必须小于或等于{lte}",
	// 可以添加更多验证规则的错误信息
}

// GetValidationError 获取验证错误的友好提示
func GetValidationError(err validator.FieldError) string {
	tag := err.Tag()
	field := err.Field()
	param := err.Param()

	// 获取错误信息模板
	if msg, exists := errorMessages[tag]; exists {
		// 替换占位符
		msg = strings.ReplaceAll(msg, "{field}", field)
		msg = strings.ReplaceAll(msg, "{"+tag+"}", param)
		return msg
	}

	// 默认错误信息
	return fmt.Sprintf("%s 字段验证失败，规则: %s", field, tag)
}

// GetErrorMap 将验证错误转换为字段-错误信息映射
func GetErrorMap(errs validator.ValidationErrors) map[string]string {
	errors := make(map[string]string)
	for _, err := range errs {
		errors[err.Field()] = GetValidationError(err)
	}
	return errors
}
